Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

258
Visualizações
Regex para delimitador de espacios en blanco excepto para los caracteres [ y ]

Me considero bastante bueno con las expresiones regulares, pero esta parece ser sorprendentemente complicada.

Quiero recortar todos los espacios en blanco, excepto los que están entre los caracteres "" y [].

Usé esta expresión regular ("[^"]*"|\S+)\s+ pero dividí la parte [06/Jan/2021:17:50:09 +0300] de mi registro en dos bloques.

Aquí está mi línea de registro completa:

 [06/Jan/2021:17:50:09 +0300] "" 10.139.3.194 407 "CONNECT clients5.google.com:443 HTTP/1.1" "" "-" "" 4245 75 "" "" "81" ""

El resultado que obtengo se basa en mi expresión regular usando el comando sed (reemplazando los espacios en blanco por una coma):

 [06/Jan/2021:17:50:09,+0300],"",10.139.3.194,407,"CONNECT clients5.google.com:443 HTTP/1.1","","-","",4245,75,"","","81",""

Finalmente el resultado que quiero tener:

 [06/Jan/2021:17:50:09 +0300],"",10.139.3.194,407,"CONNECT clients5.google.com:443 HTTP/1.1","","-","",4245,75,"","","81",""
over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Dado que la entrada de estas muestras se parece a los registros, teniendo en cuenta que siempre estarán en el mismo formato; con esto podría intentar seguir el código awk , escrito y probado en los ejemplos mostrados en GNU awk .

 awk -v FPAT='[^]]*\\]|"[^"]*"|([0-9]+\\.){3}[0-9]+|[0-9]{2,4}' -v OFS="," '{$1=$1} 1' Input_file

Explicación:

  • La explicación simple sería usar GNU awk aquí. Que tiene la opción FPAT disponible en él.
  • Opción para establecer separadores de campo en forma de expresiones regulares. Coincide con las cosas según la expresión regular mencionada en FPAT y crea campos en consecuencia por línea.
  • Luego, establezca OFS (separador de campo de salida) como , también para todas las líneas.
  • En el programa principal de la línea de restablecimiento de awk (restableciendo el primer campo) para aplicarle el valor OFS según el requisito de OP. Lo que asegurará que las comas aparezcan en la salida solo según sea necesario.

Explicación de expresiones regulares:

 [^]]*\\] ##Matching everything till ] followed by ] here. | ##OR "[^"]*" ##Matching from " till first occurrence of " everything between them including " | ##OR ([0-9]+\\.){3}[0-9]+ ##Matching digits followed by dot 3 times followed by digits | ##OR [0-9]{2,4} ##Matching 2 to 4 digits here.
over 4 years ago · Santiago Trujillo Relatório

0

Puede unir cadenas entre corchetes agregando \[[^][]*] como alternativa al patrón del Grupo 1:

 sed -E 's/(\[[^][]*]|"[^"]*"|\S+)\s+/\1,/g'

Ahora, el patrón POSIX ERE (sintaxis habilitada con la opción -E ) coincide

  • (\[[^][]*]|"[^"]*"|\S+) - Grupo 1: ya sea
    • \[[^][]*] - un [ carácter, luego cero o más caracteres que no sean [ y ] y luego un ] carácter
    • |
    • "[^"]*" - un " carácter, cero o más caracteres que no sean " y luego un " carácter
    • | - o
    • \S+ - uno o más caracteres que no sean espacios en blanco
  • \s+ - uno o más espacios en blanco

Vea la demostración en línea :

 #!/bin/bash s='[06/Jan/2021:17:50:09 +0300] "" 10.139.3.194 407 "CONNECT clients5.google.com:443 HTTP/1.1" "" "-" "" 4245 75 "" "" "81" ""' sed -E 's/(\[[^][]*]|"[^"]*"|\S+)\s+/\1,/g' <<< "$s"

Producción:

 [06/Jan/2021:17:50:09 +0300],"",10.139.3.194,407,"CONNECT clients5.google.com:443 HTTP/1.1","","-","",4245,75,"","","81",""
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda